package cn.stylefeng.guns.modular.agv.service;

import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.modular.agv.entity.TuskAgvTask;
import cn.stylefeng.guns.modular.agv.model.params.FeedbackTaskParam;
import cn.stylefeng.guns.modular.agv.model.params.FeedbackTaskRS;
import cn.stylefeng.guns.modular.agv.model.params.TuskAgvTaskParam;
import cn.stylefeng.guns.modular.agv.model.result.TuskAgvTaskResult;
import cn.stylefeng.guns.modular.agv.util.PriorityParamVo;
import cn.stylefeng.guns.modular.agv.util.StorageRsVo;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * TUSK小车任务表 服务类
 * </p>
 *
 * @author zhangzh
 * @since 2024-05-22
 */
public interface TuskAgvTaskService extends IService<TuskAgvTask> {

    /**
     * 新增
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
    void add(TuskAgvTaskParam param);

    /**
     * TUSK 创建任务
     * @param param
     * @return
     */
    ResponseData addTask(TuskAgvTaskParam param);

    /**
     * 删除
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
    void delete(TuskAgvTaskParam param);

    /**
     * 更新
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
    void update(TuskAgvTaskParam param);

    /**
     * 查询单条数据，Specification模式
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
    TuskAgvTaskResult findBySpec(TuskAgvTaskParam param);

    /**
     * 查询列表，Specification模式
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
    List<TuskAgvTaskResult> findListBySpec(TuskAgvTaskParam param);

    /**
     * 查询分页数据，Specification模式
     *
     * @author zhangzh
     * @Date 2024-05-22
     */
     LayuiPageInfo findPageBySpec(TuskAgvTaskParam param, String condition);


    /**
     * 任务执行到关键节点上报上层系统
     * @param feedbackTaskParam
     * @return
     */
    FeedbackTaskRS feedbackTask(FeedbackTaskParam feedbackTaskParam);

    FeedbackTaskRS agvStorageFeedbackTask(FeedbackTaskParam feedbackTaskParam);




    StorageRsVo getMapStorage();

    StorageRsVo getMapStorageByRoadway(String roadway);


    /**
     * 设置优先级
     * @return
     */
    FeedbackTaskRS setPriority(PriorityParamVo priority);


    FeedbackTaskRS clear(String areaName);

    void clearAll();

}
